<h1>Tutorial - Basic (Je eerste pagina)</h1>

<p>Om een pagina te maken zullen we eerst een controller op moeten zetten. Een 
controller is niets meer dan de logica voor je applicatie.</p>

<p>Als wij bijvoorbeeld de volgende pagina aanroepen:</p>

<div class="code">
<?php
highlight_string('http://localhost/news/general/20');
?>
</div>

<p>Zal G kijken of de controller "news" bestaat. De methode (actie) die vervolgens aangeroepen
wordt is <strong>general</strong>. Dan zullen wij de laatste 20 nieuws items tonen.
Je hebt misschien al wel gemerkt dat de URL een bepaald patroon heeft, welke je vaak ziet
in MVC.</p>

<div class="code">
<?php
highlight_string('http://localhost/[controller class]/[controller methode]/[argumenten]');
?>
</div>

<p>Natuurlijk kunnen de URL's er nog veel ingewikkelder uitzien, maar nu hoeven
we dit nog niet te weten en kunnen we hiermee doorgaan. Nu je weet hoe controllers
aangeroepen worden, is het tijd om een controller aan te maken. Maak een nieuw
bestand <strong>application/controllers/Pages.php</strong> met de volgende code:</p>

<div class="code">
<?php
highlight_string('<?php
namespace application/controllers;

use system\core\Controller;

class Pages extends Controller
{
    public function view( $page = \'home\' )
    {
        // We disable the template auto rendering, because we want to render it ourself
        $this->template->disable();
        
        // Here, we write a view to the "content" region of the template
        $this->template->writeview(\'content\', \'pages/\' . $page);
        
        // Everything is done, let\'s render the template to the browser
        $this->template->render();
    }
}');
?>
</div>

<p>Je hebt zojuist een controller gemaakt genaamd: "Pages". Deze controller
    heeft een "view" methode en deze accepteerd 1 argument genaamd <strong>$page</strong>.
    We stoppen deze class in de namespace <strong>application/controllers</strong>.</p>

<p>Alle classes die je aanmaakt zul je in hun eigen namespace moeten zetten, deze
    is altijd hetzelfde als de folders waar deze inzit. Als je bijvoorbeeld
    een model (bijv. NewsModel.php) hebt in de folder <strong>application/models</strong>, dan heeft
    dit bestand als namespace:</p>

<div class="code">
<?php
highlight_string('namespace application/models;');
?>
</div>

<p>Dat is het hele principe achter namespaces, niks bijzonders, we geven alleen aan
in welk "pakket" dit bestand hoort. Nu hebben we nog de volgende regel die misschien
nog voor wat onduidelijkheid zorgt:</p>

<div class="code">
<?php
highlight_string('use system\core\Controller;');
?>
</div>

<p>Met <strong>use</strong> geven we aan welke componenten we gaan gebruiken binnen dit
bestand. Deze wordt dan gevolgd door de namespace van de betreffende class met
vervolgens de class naam zelf (met hoofdletter!). We bevelen aan om een IDE (Netbeans, PHPStorm etc.) te gebruiken die codehinting heeft en namespaces
ondersteund, je zult merken dat de IDE de namespaces opzoekt terwijl je ze typt!</p>

<p>Waarom hebben wij eigenlijk de class <strong>system\core\Controller</strong> nodig?
Dit misschien wel het belangrijkste van je hele controller, aangezien je door deze
class views kunt inladen, templates kunt beheren, sessies etc. Dit wil je natuurlijk
allemaal makkelijk benaderen, zonder zelf een instantie van deze componenten
te maken. Deze componenten kun je dan ook benaderen door middel van <strong>$this</strong>,
welke verwijst naar het huidige object. Aangezien je extend vanuit <strong>system\core\Controller</strong>
hebben we toegang tot bijvoorbeeld: <strong>$this->template</strong> en <strong>$this->load</strong>.
Deze properties bevatten een instantie van hun bijbehorende class, zo bevat <strong>$this->template</strong>
een instantie van de <strong>application/libraries/Template</strong> class etc.</p>

<p>Nu we de controller opgezet hebben, wijzigen we de al bestaande <strong>application/templates/template.phtml</strong>;
Dit is je standaard template voor je applicatie. Open dit bestand en geef het de volgende code:</p>

<div class="code">
<?php
highlight_string('<!DOCTYPE html>

<html>
    <head>
        <meta name="charset" content="utf-8" />
            
        <title>G - Tutorial Basic</title>
        
        <style type="text/css">
            html, body {
                font-family: Arial, helvetica, sans-serif;
                font-size: 13px;
                color: #333;
            }

            #header {
                background-color: #ddd;
                height: 74px;
                padding: 8px 0 0 20px;
            }

            #content {}
        </style>
    </head>
    <body>
    
        <div id="header"><h1>Header</h1></div>
        
        <div id="content"><?=$content?></div>
           
    </body>
</html>');
?>
</div>

<p>We gebruiken wat CSS om de layout wat te stijlen. De regel die je website dynamisch maakt is:</p>

<div class="code">
    <?php
    highlight_string('<div id="content"><?=$content?></div>');
    ?>
</div>

<p>We zien hier een PHP variable die we echo&euml;n, maar je ziet nergens dat deze
wordt gedefinie&euml;rd of dat er iets
in wordt opgeslagen. Dit klopt allemaal, aangezien de Template class dit voor
ons regelt. We hebben in de <strong>settings.ini</strong> een template sectie, waarin
verschillende regio's staan beschreven (standaard: title en content). Deze regio's 
kun je weer in je template bestand (templates/template.phtml) echo&euml;n doormiddel
van de bijbehorende PHP variable ($content voor de content regio en $title voor de title regio etc.).</p>

<p>Je zou $content dus kunnen zien als een placeholder voor HTML welke zich in 
een ander bestand bevind. We gaan hier nu ook gebruik van maken, maak een nieuw
bestand: <strong>application/views/pages/home.phtml</strong> en geef het de volgende content</p>

<div class="code">
<?php
highlight_string('<h1>Home</h1>

<p>Dit is mijn eerste pagina!</p>');
?>
</div>

<p>Mooi! Je hebt net je eerste view gemaakt. Views zijn bestanden die de presentatie van de pagina vertegenwoordigen.
Kortgezegt komt hier gewoon alle HTML code in. Maar dit neemt niet weg dat je geen PHP mag gebruiken. Het komt vaak
voor dat je een korte <i>if else</i> statement wilt of dat je wilt lopen door een array. Dit is allemaal toegestaan binnen je view
bestanden. Binnen je views moet je geen sterke applicatie logica zetten, zoals het ophalen van gegevens uit een database of
model. Dit soort dingen doe je allemaal in je controller! Hieronder zal ik een view laten zien die wat complexer  is, dit
bestand heb je niet nodig voor deze tutorial en is slechts als voorbeeld.</p>

<div class="code">
<?php
highlight_string('<h1>Voorbeeld</h1>

<?php if ( $open == TRUE ): ?>
    <p>Open!</p>
<?php else: ?>
    <p>Niet open!</p>
<?php endif; ?>

<h2>Users</h2>
<?php foreach ( $users as $user ): ?>
    <strong><?=$user[\'username\']?></strong>
    <br />
<?php endforeach; ?>
');
?>
</div>

<p>In de view hierboven hebben we een simpele <i>if else</i> statement en een <i>foreach</i> loop die itereerd over $users.
Nu weet je wat views zijn en wat je erin kunt doen. Nu wordt het tijd om je pagina eens te bekijken! Navigeer in je browser
naar de volgende URL:</p>

<div class="code">
<?php
highlight_string('http://localhost/pages/view/home');
?>
</div>

<p>Aai, je eerste pagina in G! Nu willen we natuurlijk af van de lange URL die we nu hebben.
Het zou veel mooier zijn als we dezelfde pagina konden tonen met deze URL:</p>

<div class="code">
<?php
highlight_string('http://localhost/home');
?>
</div>

<p>Dit gaan we doen in deel 2: <a href="<?=base_url('tutorial/basic/routing')?>">Routing basics</a>.</p>